package com.jctrip.hotel.source.model.elong.resp.offline;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @Author: zxy
 * @CreateTime: 2023-09-08 17:45
 * @Description:
 */
@Data
public class ElongQueryHotelResp implements Serializable {
    @JsonProperty("Detail")
    private Detail detail;

    @JsonProperty("Suppliers")
    private List<Supplier> suppliers;

    @JsonProperty("Rooms")
    private List<Room> rooms;

    @JsonProperty("Images")
    private List<Image> images;

    @JsonProperty("Review")
    private Review review;

    @JsonProperty("Grade")
    private Grade grade;

    @Data
    public static class Detail implements Serializable{
        @JsonProperty("HotelId")
        private String hotelId;

        @JsonProperty("HotelName")
        private String hotelName;

        @JsonProperty("HotelNameEn")
        private String hotelNameEn;

        @JsonProperty("HotelStatus")
        private Integer hotelStatus;

        @JsonProperty("HotelUsedName")
        private String hotelUsedName;

        @JsonProperty("HotelUsedNameEn")
        private String hotelUsedNameEn;

        @JsonProperty("HotelNameLocal")
        private String hotelNameLocal;

        @JsonProperty("HotelNameLocalEn")
        private String hotelNameLocalEn;

        @JsonProperty("ShortName")
        private String shortName;

        @JsonProperty("ShortNameEn")
        private String shortNameEn;

        @JsonProperty("Address")
        private String address;

        @JsonProperty("AddressEn")
        private String addressEn;

        @JsonProperty("PostalCode")
        private String postalCode;

        @JsonProperty("StarRate")
        private Integer StarRate;

        @JsonProperty("Category")
        private Integer category;

        @JsonProperty("Phone")
        private String phone;

        @JsonProperty("Fax")
        private String fax;

        @JsonProperty("Email")
        private String email;

        @JsonProperty("Timezone")
        private String timezone;

        @JsonProperty("Licenses")
        private List<String> licenses;

        @JsonProperty("EstablishmentDate")
        private String establishmentDate;

        @JsonProperty("RenovationDate")
        private String renovationDate;

        @JsonProperty("GroupId")
        private String groupId;

        @JsonProperty("GroupName")
        private String groupName;

        @JsonProperty("GroupNameEn")
        private String groupNameEn;

        @JsonProperty("BrandId")
        private String brandId;

        @JsonProperty("BrandName")
        private String brandName;

        @JsonProperty("BrandNameEn")
        private String brandNameEn;

        @JsonProperty("IsEconomic")
        private Integer isEconomic;

        @JsonProperty("IsApartment")
        private Integer isApartment;

        @JsonProperty("ArrivalTime")
        private String arrivalTime;

        @JsonProperty("DepartureTime")
        private String departureTime;

        @JsonProperty("GoogleLat")
        private BigDecimal googleLat;

        @JsonProperty("GoogleLon")
        private BigDecimal googleLon;

        @JsonProperty("BaiduLat")
        private BigDecimal baiduLat;

        @JsonProperty("BaiduLon")
        private BigDecimal baiduLon;

        @JsonProperty("CountryId")
        private String countryId;

        @JsonProperty("CountryName")
        private String countryName;

        @JsonProperty("CountryNameEn")
        private String countryNameEn;

        @JsonProperty("CityId")
        private String cityId;

        @JsonProperty("CityName")
        private String cityName;

        @JsonProperty("CityNameEn")
        private String cityNameEn;

        @JsonProperty("CityId2")
        private String cityId2;

        @JsonProperty("District")
        private String district;

        @JsonProperty("DistrictName")
        private String districtName;

        @JsonProperty("DistrictNameEn")
        private String districtNameEn;

        @JsonProperty("BusinessZone")
        private String businessZone;

        @JsonProperty("BusinessZoneName")
        private String businessZoneName;

        @JsonProperty("BusinessZoneNameEn")
        private String businessZoneNameEn;

        @JsonProperty("BusinessZone2")
        private String businessZone2;

        @JsonProperty("BusinessZone2Name")
        private String businessZone2Name;

        @JsonProperty("BusinessZone2NameEn")
        private String businessZone2NameEn;

        @JsonProperty("CreditCards")
        private String creditCards;

        @JsonProperty("CreditCardsEn")
        private String creditCardsEn;

        @JsonProperty("IntroEditor")
        private String IntegerroEditor;

        @JsonProperty("IntroEditorEn")
        private String IntegerroEditorEn;

        @JsonProperty("Description")
        private String description;

        @JsonProperty("DescriptionEn")
        private String descriptionEn;

        @JsonProperty("AirportPickUpService")
        private String airportPickUpService;

        @JsonProperty("AirportPickUpServiceEn")
        private String airportPickUpServiceEn;

        @JsonProperty("Traffic")
        private String traffic;

        @JsonProperty("TrafficEn")
        private String trafficEn;

        @JsonProperty("Surroundings")
        private String surroundings;

        @JsonProperty("SurroundingsEn")
        private String surroundingsEn;

        @JsonProperty("Features")
        private String features;

        @JsonProperty("FeaturesEn")
        private String featuresEn;

        @JsonProperty("GeneralFacilities")
        private List<Facility> generalFacilities;

        @JsonProperty("RecreationFacilities")
        private List<Facility> recreationFacilities;

        @JsonProperty("ServiceFacilities")
        private List<Facility> serviceFacilities;

        @JsonProperty("BookingNoticeFacilities")
        private List<Facility> bookingNoticeFacilities;

        @JsonProperty("HasCoupon")
        private Boolean hasCoupon;

        @JsonProperty("Themes")
        private List<Theme> themes;

        @JsonProperty("RoomTotalAmount")
        private Integer roomTotalAmount;

        @JsonProperty("HotelTypes")
        private List<HotelType> hotelTypes;

        @JsonProperty("ServiceRank")
        private ServiceRank serviceRank;

        @JsonProperty("ParkInfos")
        private List<ParkInfo> parkInfos;

        @JsonProperty("TelList")
        private List<Tel> telList;
    }

    @Data
    public static class Facility implements Serializable{
        @JsonProperty("FacilityId")
        private String facilityId;

        @JsonProperty("FacilityName")
        private String facilityName;

        @JsonProperty("FacilityNameEn")
        private String facilityNameEn;
    }

    @Data
    public static class Theme implements Serializable{
        @JsonProperty("ThemeId")
        private String themeId;

        @JsonProperty("ThemeName")
        private String themeName;

        @JsonProperty("ThemeNameEn")
        private String themeNameEn;
    }

    @Data
    public static class HotelType implements Serializable {
        @JsonProperty("HotelTypeId")
        private String hotelTypeId;

        @JsonProperty("HotelTypeName")
        private String hotelTypeName;

        @JsonProperty("HotelTypeNameEn")
        private String hotelTypeNameEn;
    }

    @Data
    public static class ServiceRank implements Serializable {
        @JsonProperty("SummaryScore")
        private String summaryScore;

        @JsonProperty("InstantConfirmScore")
        private String instantConfirmScore;

        @JsonProperty("BookingSuccessScore")
        private String bookingSuccessScore;

        @JsonProperty("ComplaintScore")
        private String complaIntegerScore;
    }

    @Data
    public static class Review implements Serializable {
        @JsonProperty("ReviewCount")
        private Integer reviewCount;

        @JsonProperty("ReviewGoodsCount")
        private Integer reviewGoodsCount;

        @JsonProperty("ReviewPoorCount")
        private Integer reviewPoorCount;

        @JsonProperty("ReviewScore")
        private String reviewScore;
    }

    @Data
    public static class Grade implements Serializable {
        @JsonProperty("ConfirmRateOf30Minute")
        private Integer confirmRateOf30Minute;

        @JsonProperty("GradeOfOrderCountB90")
        private Integer gradeOfOrderCountB90;

        @JsonProperty("GradeOfOrderCountC90")
        private Integer gradeOfOrderCountC90;

        @JsonProperty("GradeOfProd30")
        private Integer gradeOfProd30;

        @JsonProperty("ValRateOf90")
        private Integer valRateOf90;
    }

    @Data
    public static class Supplier implements Serializable {
        @JsonProperty("SupplierID")
        private String supplierID;

        @JsonProperty("HotelCode")
        private String hotelCode;

        @JsonProperty("WeekendStart")
        private Integer weekendStart;

        @JsonProperty("WeekendEnd")
        private Integer weekendEnd;

        @JsonProperty("InstantRoomTypes")
        private String instantRoomTypes;

        @JsonProperty("Status")
        private Boolean status;

        @JsonProperty("InvokeType")
        private String invokeType;

        @JsonProperty("AvailPolicy")
        private AvailPolicy availPolicy;

        @JsonProperty("HelpfulTip")
        private HelpfulTip helpfulTip;
    }

    @Data
    public static class AvailPolicy implements Serializable {
        @JsonProperty("StartDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date startDate;

        @JsonProperty("EndDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date endDate;

        @JsonProperty("Description")
        private String description;

        @JsonProperty("DescriptionEn")
        private String descriptionEn;
    }

    @Data
    public static class HelpfulTip implements Serializable {
        @JsonProperty("StartDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date startDate;

        @JsonProperty("EndDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date endDate;

        @JsonProperty("Description")
        private String description;

        @JsonProperty("DescriptionEn")
        private String descriptionEn;
    }

    @Data
    public static class Room implements Serializable {
        @JsonProperty("RoomID")
        private String roomID;

        @JsonProperty("RoomName")
        private String roomName;

        @JsonProperty("RoomNameEn")
        private String roomNameEn;

        @JsonProperty("Area")
        private String area;

        @JsonProperty("Floor")
        private String floor;

        @JsonProperty("BroadnetAccess")
        private Integer broadnetAccess;

        @JsonProperty("BroadnetFee")
        private Integer broadnetFee;

        @JsonProperty("BedType")
        private String bedType;

        @JsonProperty("BedTypeEn")
        private String bedTypeEn;

        @JsonProperty("Description")
        private String description;

        @JsonProperty("DescriptionEn")
        private String descriptionEn;

        @JsonProperty("Comments")
        private String comments;

        @JsonProperty("CommentsEn")
        private String commentsEn;

        @JsonProperty("Capacity")
        private Integer capacity;

        @JsonProperty("Amount")
        private Integer amount;

        @JsonProperty("Facilities")
        private List<Facility> facilities;
    }

    @Data
    public static class Image implements Serializable {
        @JsonProperty("RoomID")
        private String roomID;

        @JsonProperty("Type")
        private Integer type;

        @JsonProperty("TypeName")
        private String typeName;

        @JsonProperty("TypeNameEn")
        private String typeNameEn;

        @JsonProperty("AuthorType")
        private String authorType;

        @JsonProperty("IsCoverImage")
        private Boolean isCoverImage;

        @JsonProperty("IsRoomCoverImage")
        private Boolean isRoomCoverImage;

        @JsonProperty("Locations")
        private List<Location> locations;
    }

    @Data
    public static class Location implements Serializable {
        @JsonProperty("WaterMark")
        private Integer watermark;

        @JsonProperty("Size")
        private Integer size;

        @JsonProperty("Url")
        private String url;
    }

    @Data
    public static class ParkInfo implements Serializable {
        @JsonProperty("Title")
        private String title;

        @JsonProperty("Desc")
        private List<String> desc;

        @JsonProperty("Type")
        private String type;
    }

    @Data
    public static class Tel implements Serializable {
        @JsonProperty("nationCode")
        private String nationCode;

        @JsonProperty("areaCode")
        private String areaCode;

        @JsonProperty("mainCode")
        private String mainCode;

        @JsonProperty("extCode")
        private String extCode;

        @JsonProperty("type")
        private Integer type;
    }
}
